package com.gouyan.system.domin;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * @Author: 华雨欣
 * @Create: 2020-11-21 22:26
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
//实现 Serializable 接口的主要目的是告诉 Java 虚拟机（JVM）该类的对象可以被序列化。
/**
 * 序列化的原因：
 * 1.持久化存储
 * 如果需要将 SysMovie 对象保存到文件或数据库中，必须实现 Serializable 接口。
 * 例如，在某些场景下，可能需要将电影信息缓存到磁盘或者分布式缓存系统（如 Redis）中，序列化是必要的。
 * 2.网络传输
 * 在分布式系统中，对象通常需要通过网络在不同的服务之间传递。例如：
 * 客户端和服务器之间的通信。
 * 微服务架构中不同服务之间的数据交换。
 * 实现 Serializable 接口后，对象可以通过网络以字节流的形式传输。
 * 3.缓存机制
 * 在使用缓存框架（如 Ehcache、Redis）时，缓存的对象通常需要实现 Serializable 接口，以便能够将对象存储到缓存中。
 */
public class SysMovie implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long movieId;

    //电影中文名
    @NotBlank(message = "电影中文名不能为空")
    private String movieNameCn;

    //电影英文名
    @NotBlank(message = "电影英文名不能为空")
    private String movieNameEn;

    //电影时长
    private Integer movieLength;

    //电影海报
    private String moviePoster;

    //电影区域id
    private Long movieAreaId;

    //电影年代id
    private Long movieAgeId;

    //上映日期
    private Date releaseDate;

    //电影评分
    private Double movieScore;

    //电影总票房
    private Double movieBoxOffice;

    //评分人数
    private Integer movieRateNum;

    //电影简介
    private String movieIntroduction;

    //电影图集
    private String moviePictures;


    //电影区域
    private SysMovieArea sysMovieArea;

    //电影年代
    private SysMovieAge sysMovieAge;


    //电影的参演人员角色，每个角色分别对应若干演员
    private List<SysActorRole> actorRoleList;

    //影评列表
    private List<SysMovieComment> movieCommentList;

    //电影的类别
    private List<SysMovieCategory> movieCategoryList;

    //电影主演名称，在影院中显示
    private List<String> majorActorNameList;

}
